package managed.bean;

import com.marlboroug.articles.ArticlesManagerRemote;
import com.marlboroug.editors.EditorsManagerRemote;
import com.marlboroug.entity.Articles;
import com.marlboroug.entity.Editors;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

/**
 * Gestion des éditeurs.
 *
 * @author Cyril Schumacher
 */
@ManagedBean
@SessionScoped
public class EditorManager implements Serializable {
    // <editor-fold defaultstate="collapsed" desc="Membres.">
    /**
     * Gestion des editeurs.
     */
    @EJB
    private EditorsManagerRemote _editorsManager;
    /**
     * Gestion des articles avec les auteurs.
     */
    @EJB
    private ArticlesManagerRemote _articlesManager;
    /**
     * Informations sur l'éditeur.
     */
    private Editors editor;
    /**
     * Liste des éditeurs existants.
     */
    private ArrayList<Editors> editors;
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Accesseurs/Mutateurs.">
    /**
     * Obtient les informations d'un éditeur.
     *
     * @return Retourne les informations d'un éditeur.
     */
    public Editors getEditor() {
        return editor;
    }

    /**
     * Définit les informations d'un éditeur.
     *
     * @param editor Informations d'un éditeur.
     */
    public void setEditor(Editors editor) {
        this.editor = editor;
    }

    /**
     * Obtient la liste des éditeurs existants.
     *
     * @return Retourne une liste des éditeurs.
     */
    public ArrayList<Editors> getEditors() {
        return editors;
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Méthodes.">
    // <editor-fold defaultstate="collapsed" desc="Privées.">
    private void _refresh() {
        editors = new ArrayList<>(_editorsManager.findAll());
    }

    // </editor-fold>
    /**
     * Supprime un éditeur.
     *
     * @param id Identifiant de l'éditeur.
     */
    public void delete(Long id) {
        int id_article2 = 0;
        List<Articles> verifArticle2 = _articlesManager.ArticlesFindEditor(5, id);
        for (Articles d : verifArticle2) {
            id_article2 = d.getIDarticles().intValue();
        }
        if (id_article2 == 0) {
            _editorsManager.delete(Long.valueOf(id));
            _refresh();
        } else {
            // Récupère les informations contextuelles associées au traitement 
            // de la requête pour pouvoir gérer les erreurs/informations.
            FacesContext context = FacesContext.getCurrentInstance();
            // Si l'utilisateur n'a pas pu être créer, on signale l'erreur à 
            // l'utilisateur.
            context.addMessage("id", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Une erreur est survenue lors de la suppression.", null));
        }
    }

    /**
     * Met à jour les informations d'un éditeur.
     * @param editor Editeur.
     */
    public void update(Editors editor) {
        if (_editorsManager.update(editor)) {
            _refresh();
        } else {
            // Récupère les informations contextuelles associées au traitement 
            // de la requête pour pouvoir gérer les erreurs/informations.
            FacesContext context = FacesContext.getCurrentInstance();
            // Si l'utilisateur n'a pas pu être créer, on signale l'erreur à 
            // l'utilisateur.
            context.addMessage("id", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Une erreur est survenue lors de la mise à jour.", null));
        }
    }

    /**
     * Créer un éditeur.
     *
     * @return Retourne une chaîne de caractère pour le contrôle JSF.
     */
    public String create() {
        if (_editorsManager.create(getEditor())) {
            editors = new ArrayList<>(_editorsManager.findAll());
            setEditor(new Editors());
            return "success";
        }

        // Récupère les informations contextuelles associées au traitement 
        // de la requête pour pouvoir gérer les erreurs/informations.
        FacesContext context = FacesContext.getCurrentInstance();
        // Si l'utilisateur n'a pas pu être créer, on signale l'erreur à 
        // l'utilisateur.
        context.addMessage("id", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Une erreur est survenue lors de la création.", null));
        return "failure";
    }

    /**
     * Initialise la classe.
     */
    @PostConstruct
    public void initialize() {
        setEditor(new Editors());
        _refresh();
    }
    // </editor-fold>
}
